#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
// 要求：两个进程交替打印
// t1一个打印奇数，t2一个打印偶数

int main()
{
    std::mutex mtx;
    std::condition_variable cv;
    bool flag = false; // flag的作用：一开始保证t1先运行，并且打印一个值后马上置反，保证一个线程一次只打印一次值
    int x = 0;
    std::thread t1([&](){
        for(int i = 0; i < 10; i++)
        {
            std::unique_lock<std::mutex> lock(mtx);
            if(flag) 
                cv.wait(lock);
            x++;
            std::cout << "t1打印: " << x << std::endl;
            flag = true;
            cv.notify_one();
        }
    });
    std::thread t2([&](){
        for(int i = 0; i < 10; i++)
        {
            std::unique_lock<std::mutex> lock(mtx);
            if(!flag)
                cv.wait(lock);
            x++;
            std::cout << "t2打印: " << x << std::endl;
            flag = false;
            cv.notify_one();
        }
    });
    t1.join();
    t2.join();
    return 0;
}